package com.gjintel.framework.user.service;

import java.util.List;

import com.gjintel.framework.dict.model.Dictionary;
import com.gjintel.framework.role.model.Role;
import com.gjintel.framework.user.model.User;
import com.gjintel.framework.user.model.UserRole;
import com.gjintel.sdk.base.dao.Page;
import com.gjintel.sdk.base.dao.Sort;
import com.gjintel.sdk.base.service.IBaseService;

/**
 * @description 用户业务接口
 * @author fengya
 * @date 2015-7-31 下午01:14:23
 */
public interface IUserService extends IBaseService {
	/**
	 * @description 查询所有的用户信息
	 * @author fengya
	 * @date 2015-7-31 下午01:14:38
	 * @param page
	 * @param user
	 * @param sort
	 * @return void
	 */
	List<User> findAll();

	/**
	 * @description 分页查询用户信息
	 * @author fengya
	 * @date 2015-7-31 下午01:14:38
	 * @param page
	 * @param user
	 * @param sort
	 * @return void
	 */
	@SuppressWarnings("unchecked")
	List<User> findAll(Page page, User user, Sort sort, int loginUserType,
			String loginUserDeptUnit,String roles);

	/**
	 * @description 根据选择的ID对用户进行删除
	 * @author fengya
	 * @date 2015-7-31 下午01:14:56
	 * @param deleteIds
	 * @throws Exception
	 * @return void
	 */
	void removeData(String deleteIds);

	/**
	 * @description 对用户进行绑定角色
	 * @author fengya
	 * @date 2015-7-31 下午01:15:10
	 * @param userIdStr
	 * @param roleId
	 * @return
	 * @return List<UserRole>
	 */
	List<UserRole> bindRole(User sUser, String userIdStr, String roleId);

	/**
	 * @description 根据用户ID得到用户的角色列表
	 * @author fengya
	 * @date 2015-7-31 下午01:15:25
	 * @param userId
	 * @return
	 * @return List<Role>
	 */
	List<Role> getUserRole(String userId);

	/**
	 * @description 根据角色分页显示用户信息
	 * @author fengya
	 * @date 2015-7-31 下午01:15:47
	 * @param page
	 * @param roleId
	 * @param sort
	 * @param roleUser
	 * @return void
	 */
	@SuppressWarnings("unchecked")
	void roleUsers(Page page, String roleId, Sort sort, boolean roleUser);

	/**
	 * @description 根据用户类型获得该类型下所有的用户信息
	 * @author fengya
	 * @date 2016-3-16 下午01:37:35
	 * @param page
	 * @param userType
	 * @param sort
	 * @return void
	 */
	void getUsers(Page page, String userType, Sort sort);

	/**
	 * @description 根据用户名得到用户信息
	 * @author fengya
	 * @date 2015-7-31 下午01:16:18
	 * @param loginName
	 * @return
	 * @return List<User>
	 */
	List<User> login(String loginName);
	
	/**
	 * @description 根据公司名得到用户信息
	 * @author fengya
	 * @date 2015-7-31 下午01:16:18
	 * @param loginName
	 * @return
	 * @return List<User>
	 */
	List<User> getUserByCompany(String company);

	/**
	 * @description ca登录
	 * @author fengya
	 * @date 2016-4-11 上午03:18:25
	 * @param caName
	 * @return
	 * @return List<User>
	 */
	List<User> caLogin(String caName);

	/**
	 * 保存用户权限
	 * 
	 * @param user
	 * @param roleIds
	 * @param rightVal
	 * @param goodsTypeIds
	 */
	void saveRightData(User sUser, String userId, String roleIds,
			String rightVal, String goodsTypeIds);

	/**
	 * @description 根据用户ID获得该用户的角色信息
	 * @author fengya
	 * @date 2016-3-31 上午11:25:05
	 * @param userId
	 * @return
	 * @return String
	 */
	String getUserRoleData(String userId);

	/**
	 * @description 得到用户权限数据
	 * @author fengya
	 * @date 2016-3-31 上午11:48:02
	 * @param userId
	 * @return
	 * @return String
	 */
	String getUserRightData(String userId);

	
	/**
	 * 获取指定用户的权限列表
	 * 
	 * @param userId
	 * @return
	 */
	List<Dictionary> getUserRights(String userId);
	
	
	/**
	 * 获取登录用户(过滤已经标记删除)
	 */	
	List<User> getLoginUser(String loginName);
	
	/**
	 * 获取登录用户(唯一登录名过滤)
	 */	
	List<User> getLoginUserByLoginName(String loginName);

	/**
	 * 通过registerId 获取user
	 */
	User getUserByRegisterId(String registerId);
}
